#include <stdio.h>
#include <time.h>
#include <windows.h>
#include <conio.h>

// 时间结构体
typedef struct {
	int hour;
	int minute;
	int second;
} Time;

// 显示时间
void displayTime(Time t) {
	printf("%02d:%02d:%02d", t.hour, t.minute, t.second);
}

// 设置时间
void setTime(Time *t) {
	printf("请输入小时(0-23): ");
	scanf("%d", &(t->hour));
	printf("请输入分钟(0-59): ");
	scanf("%d", &(t->minute));
	printf("请输入秒(0-59): ");
	scanf("%d", &(t->second));
}

// 倒计时功能
void countdown(Time t) {
	while (t.hour > 0 || t.minute > 0 || t.second > 0) {
		system("cls"); // 清屏
		printf("倒计时: ");
		displayTime(t);
		
		// 时间减少
		if (t.second > 0) {
			t.second--;
		} else {
			if (t.minute > 0) {
				t.minute--;
				t.second = 59;
			} else if (t.hour > 0) {
				t.hour--;
				t.minute = 59;
				t.second = 59;
			}
		}
		
		Sleep(1000); // 等待1秒
	}
	
	system("cls");
	printf("倒计时结束!\n");
}

// 获取当前系统时间
Time getCurrentTime() {
	time_t now;
	struct tm *local;
	Time current;
	time(&now);
	local = localtime(&now);
	current.hour = local->tm_hour;
	current.minute = local->tm_min;
	current.second = local->tm_sec;
	return current;
}

int main() {
	int choice;
	Time current, custom;
	while (1) {
		system("cls");
		printf("数字时钟\n");
		printf("1. 显示当前时间\n");
		printf("2. 设置自定义时间\n");
		printf("3. 开始倒计时\n");
		printf("4. 退出\n");
		printf("请选择: ");
		scanf("%d", &choice);
		switch (choice) {
		case 1:
			while (1) {
				system("cls");
				current = getCurrentTime();
				printf("当前时间: ");
				displayTime(current);
				
				Sleep(1000); // 每秒更新
				
				if (kbhit()) { // 检测按键
					getch(); // 清除按键缓冲区
					break;
				}
			}
			break;
		case 2:
			setTime(&custom);
			printf("设置的时间为: ");
			displayTime(custom);
			Sleep(2000);
			break;
		case 3:
			printf("设置倒计时时间:\n");
			setTime(&custom);
			countdown(custom);
			Sleep(2000);
			break;
		case 4:
			return 0;
		default:
			printf("无效选择!\n");
			Sleep(1000);
		}
	}
	return 0;
}
